import axios from 'axios'
import commonUtils from '@/utils/common'
import vant from 'vant'

const ins = axios.interceptors // 拦截器

// 下方这句baseurl的代码将会被注释，将会改用反向代理方案解决不同域的问题
axios.defaults.baseURL = process.env.VUE_APP_BASE_API
axios.defaults.crossDomain = true // 允许跨域
axios.defaults.withCredentials = false // true允许携带cookies，跨域传输cookie浏览器无法获取当前域的cookies，但是默认会自动进行携带传输
axios.defaults.timeout = 10 * 1000 // 默认用10s超时时间
axios.defaults.headers = { // 配置OAuth 2.0的认证头
  'Content-Type': 'application/json;charset=utf-8'
}
// 请求前置拦截器
ins.request.use(config => {
  config.headers['token'] = localStorage.getItem('visitorH5_token')
  return config
}, error => {
  return Promise.reject(error)
})

// 响应前置拦截器
ins.response.use(res => {
  if (res.status === 200) {
    return Promise.resolve(res.data)
  }
  return Promise.resolve(res)
}, error => {
  if (error && error.response) {
    if (error.response.status === 500 && error.response.data) {
      // -2 token过期 && -3 token无效 && -4 token为空 && 1 参数错误
      const type = error.response.data.type
      if (type === -2 || type === -3 || type === -4) {
        console.log('token过期')
        commonUtils.reload()
      } else if (type === 1) {
        vant.Toast(error.response.data.detail)
      }
    }
  }
  return Promise.reject(error.response)
})

// 发起请求
export function request(config) {
  return new Promise(async(resolve, reject) => {
    try {
      const result = await axios({
        ...config
      })
      resolve(result)
    } catch (err) {
      reject(err)
    }
  })
}
